package com.clay.singleton.type7;

/**
 * @Author : clay
 * @Description:
 * @Date: Create in 20:15 2021/3/14
 * @Modified By:
 */
public class singletonTest7 {

    public static void main(String[] args) {

        Singleton instance = Singleton.getInstance();
        Singleton instance1 = Singleton.getInstance();

        System.out.println("静态内部类的懒汉式");
        System.out.println(instance==instance1);//同一个静态实例
        System.out.println(instance.hashCode());
        System.out.println(instance1.hashCode());

    }

}

//饿汉式(静态代码块)
class Singleton
{

    //    1.构造器私有化

    private Singleton()
    {

    }

    //2.静态内部类，该类中有一个静态属性Singleton
//    singleton类加载的时候并不会马上执行，不会导致静态内部类的装载，从而保证懒加载可用
    private static class singletonInstance
    {
        private static final  Singleton INSTANCE=new Singleton();//设置为final保证以后只能取到一个实例（常量）
    }

    //提供一个静态的公共方法，直接返回singletonInstance.INSTANCE

    public static synchronized Singleton getInstance()
    {
        return singletonInstance.INSTANCE;//导致静态内部类的加载，JVM在加载类的时是线程安全的
    }
}
